<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise的拓展方法   =>  给所有的Promise实例使用

    // then()
    // catch()
    // finally()


    // p.then(callback1,callback2)  为 Promise 实例添加状态改变时的回调函数。
    // then方法的第一个参数是resolved状态的回调函数，第二个参数是rejected状态的回调函数 
    // callback1    Promise实例状态 由pending(进行中)改为fulfilled已成功 ,执行此回调函数
    // callback2    Promise实例状态 由pending(进行中)改为rejected已失败 ,执行此回调函数

    // callback1,callback2 有一个形式参数 用于接收Promise实例中存储的数据

    // 可以理解为:提前订好了 状态改变时要执行的内容  => Promise实例状态改变时 执行对应的回调函数

    // 注意: then()方法中
    // callback2 可以接收reject()方法 以抛错形式传递的数据 (异常捕获机制  try...catch)
    // callback2 new Promise()的回调函数中代码执行过程中的错误 (仅限于同步的)

    // Promise.prototype.catch()方法是.then(null, rejection)或.then(undefined, rejection)的别名，用于指定发生错误时的回调函数。
    // a. 可以接收reject()方法 以抛错形式传递的数据 (异常捕获机制  try...catch)
    // b. new Promise()的回调函数中代码执行过程中的错误 (仅限于同步的)


    // 同步代码 => reject(11111111111);
    /*  var p = new Promise(function (resolve, reject) {
         reject(11111111111);
     })
     console.log(p);
     // p.then(null, function (msg) {
     //     console.log("失败", msg);
     // })
 
     // 模拟封装
     // p.myCatch = function (callback) {
     //     this.then(null, callback)
     // }
 
     p.catch(function (err) {
         console.log("失败", err);
     }) */

    // 异步  => reject(11111111111);
    /* var p = new Promise(function (resolve, reject) {
        setTimeout(function () {
            reject(11111111111);
            console.log("异步操作有结果", p);
        }, 2000);
    })

    console.log(p);
    p.catch(function (err) {
        console.log("失败", err);
    })
 */

    // 代码执行过程中出现的错误
    var p = new Promise(function (resolve, reject) {
        aaaaaaaa;  // 报错 aaaaaaaa is not defined  Promise回调函数 在同步代码执行过程中 出现的错误
        // setTimeout(function () {
        // }, 2000)
    })

    console.log(p);
    p.catch(function (err) {
        console.log("失败", err);
    })



</script>

</html>